package com.zwl.lib_base.base

import android.os.Bundle
import android.os.PersistableBundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.LiveData
import androidx.viewbinding.ViewBinding
import com.zwl.lib_base.annotation.RegisterEventBus
import com.zwl.lib_base.utils.EventBusUtils

private const val TAG = "BaseActivity"
abstract class BaseActivity<VB:ViewBinding,VM:BaseViewModel>: AppCompatActivity() {

    lateinit var dataBinding : VB
    protected abstract val mViewModel: VM

    /**
     * 是否有 [RegisterEventBus] 注解，避免重复调用 [Class.isAnnotation]
     */
    private var mHaveRegisterEventBus = false
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        dataBinding = createVB()
        setContentView(dataBinding.root)
        // 根据子类是否有 RegisterEventBus 注解決定是否进行注册 EventBus
        if (javaClass.isAnnotationPresent(RegisterEventBus::class.java) && !mHaveRegisterEventBus) {
            mHaveRegisterEventBus = true
            EventBusUtils.register(this)
            Log.d(TAG, "onCreate: ")
        }
        init()
        initObserve()
        initRequestData()

    }

    /**
     * 创建 [ViewBinding] 实例
     * 布局由各自BaseActivity的实现类来提供
     */
    abstract fun createVB(): VB

    /**
     * 初始化ui
     */
    abstract fun init()

    override fun onDestroy() {
        // 根据子类是否有 RegisterEventBus 注解决定是否进行注册 EventBus
        if (mHaveRegisterEventBus) {
            EventBusUtils.unRegister(this)
        }
        super.onDestroy()
    }

    /**
     * 订阅 [LiveData]
     */
    abstract fun initObserve()

    /**
     * 用于在页面创建时进行请求接口
     */
    abstract fun initRequestData()
}